home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / mus / edit / QuadraComp.lha / quadracomposer / QCCIAReplay.s next >
Text File  |  1993-03-16  |  28KB  |  1,444 lines

  1. ** This is a CIA replayroutine for EMOD's **
  2. ** It handles all commands and tempo      **
  3. ** You may include this in your own       **
  4. ** applications, if you wish...           **
  5. ** If you want to use this routinne in a  **
  6. ** player, you should write a "smart"     **
  7. ** load routine, which allocates a        **
  8. ** specific memory range for each sample  **
  9. ** and pattern etc.                       **
  10. **                          /Bo Lincoln   **
  11.  
  12. _LVOOpenResource = -498
  13. _LVOAddICRVector = -6
  14. _LVORemICRVector =     -12
  15.  
  16. call    MACRO
  17.     jsr _LVO\1(a6)
  18.     ENDM
  19.  
  20. ciapra          EQU    $0000
  21. ciaprb          EQU    $0100
  22. ciaddra      EQU    $0200
  23. ciaddrb      EQU    $0300
  24. ciatalo      EQU    $0400
  25. ciatahi      EQU    $0500
  26. ciatblo      EQU    $0600
  27. ciatbhi      EQU    $0700
  28. ciatodlow      EQU    $0800
  29. ciatodmid      EQU    $0900
  30. ciatodhi      EQU    $0A00
  31. ciasdr          EQU    $0C00
  32. ciaicr          EQU    $0D00
  33. ciacra          EQU    $0E00
  34. ciacrb          EQU    $0F00
  35.  
  36. SysB = $4
  37.  
  38. s:    move.l SysB,a6
  39.     bsr QC_init
  40.     bsr QC_makecia
  41.     st QC_introrow            ;You must reset this every time 
  42.                     ;you restart the module
  43.     st QC_ready
  44.  
  45. .loop
  46.     btst #6,$bfe001
  47.     bne .loop
  48.     bsr QC_end
  49.     bra QC_removecia
  50.  
  51.  
  52. QC_init:lea QC_data,a0        ;Check if the module is ok
  53.     cmp.l #"FORM",(a0)
  54.     bne QC_initerr
  55.     cmp.l #"EMOD",8(a0)
  56.     bne QC_initerr
  57.     cmp.l #"EMIC",12(a0)
  58.     bne QC_initerr
  59.     cmp.w #1,20(a0)
  60.     bne QC_initerr
  61.  
  62.     or.b #$2,$bfe001
  63.     moveq #0,d7        ;Get the adresses to the sampleinfos
  64.     move.b 62(a0),QC_tempo+1
  65.     move.b 63(a0),d7    ;and init the real adresses in the infos
  66.     subq #1,d7
  67.     lea 64(a0),a0
  68.     lea QC_samplepointers(pc),a1
  69. QC_sploop:moveq #0,d0
  70.     move.b (a0),d0
  71.     add.w d0,d0
  72.     add.w d0,d0
  73.     move.l a0,(a1,d0.w)
  74.     add.l #QC_data,30(a0)
  75.     move.l 30(a0),a2
  76.     clr.w (a2)
  77.     lea 34(a0),a0
  78.     dbf d7,QC_sploop
  79.  
  80.     lea QC_patternpointers(pc),a1    ;Get the patternadresses
  81.     moveq #0,d7
  82.     addq #1,a0
  83.     move.b (a0)+,d7
  84.     subq #1,d7
  85. QC_pploop:moveq #0,d0
  86.     move.b (a0),d0
  87.     add.w d0,d0
  88.     add.w d0,d0
  89.     move.l a0,(a1,d0.w)
  90.     add.l #QC_data,22(a0)
  91.     lea 26(a0),a0
  92.     dbf d7,QC_pploop
  93.  
  94.     clr.w QC_nrofpos
  95.     move.b (a0)+,QC_nrofpos+1    
  96.     move.l a0,QC_posstart
  97.     moveq #0,d0
  98.     move.b (a0),d0
  99.     add.w d0,d0
  100.     add.w d0,d0
  101.     move.l (a1,d0.w),a1
  102.     move.l 22(a1),QC_currpattpointer    
  103.     move.b 1(a1),QC_breakrow+1
  104.     move.w #6,QC_speed
  105.     move.w QC_speed(pc),QC_speedcount
  106.     clr.b QC_newposflag
  107.     clr.w QC_rowcount
  108.     clr.w QC_pos
  109.     or.b #1,QC_event
  110.     move.w #1,t_length+QC_chan1
  111.     move.w #1,t_length+QC_chan2
  112.     move.w #1,t_length+QC_chan3
  113.     move.w #1,t_length+QC_chan4
  114.     move.w #1,t_replen+QC_chan1
  115.     move.w #1,t_replen+QC_chan2
  116.     move.w #1,t_replen+QC_chan3
  117.     move.w #1,t_replen+QC_chan4
  118.     moveq #0,d0
  119. QC_end:    move.w #$f,$dff096
  120.     clr.w $dff0a8
  121.     clr.w $dff0b8
  122.     clr.w $dff0c8
  123.     clr.w $dff0d8
  124.     rts        
  125. QC_initerr:moveq #-1,d0
  126.     rts
  127.  
  128. **********************************************
  129. ;;******** Replayrutinen + interrupt *********
  130. **********************************************
  131.  
  132. QC_makecia:
  133.     move.l #1776200,QC_ciaspeed
  134.     moveq #0,d0
  135.     lea QC_cianame(pc),a1
  136.     move.l SysB,a6
  137.     call OpenResource
  138.     move.l d0,QC_ciabase
  139.     beq QC_ciaerr
  140.     move.l d0,a6
  141.     lea QC_intserver(pc),a1
  142.     moveq #0,d0
  143.     call AddICRVector
  144.     tst.l d0
  145.     bne QC_ciaerr
  146.     lea $bfd000,a0
  147.     move.l QC_ciaspeed,d0
  148.     divs #125,d0
  149.     move.b d0,ciatalo(a0)
  150.     lsr.w #8,d0
  151.     move.b d0,ciatahi(a0)
  152.     or.b #1,ciacra(a0)
  153.     st CIAFlag
  154.     moveq #-1,d0
  155.     rts
  156.  
  157.  
  158. QC_removecia:
  159.     tst.b CIAFlag
  160.     beq QC_ciaerr
  161.     move.l QC_ciabase(pc),a6
  162.     lea $bfd000,a0
  163.     and.b #$fe,ciacra(a0)
  164.     lea QC_intserver(pc),a1
  165.     moveq #0,d0
  166.     call RemICRVector
  167.     rts
  168.  
  169. QC_ciaerr:
  170.     sf CIAFlag
  171.     moveq #0,d0
  172.     rts
  173.  
  174. QC_play:movem.l d0-d2/d7/a0-a6,-(sp)
  175.     bsr QC_music
  176.     movem.l (sp)+,d0-d2/d7/a0-a6
  177.     rts
  178.  
  179. QC_music:                        ;Ny (hela replayen)
  180.     tst.b QC_ready
  181.     beq QC_mend
  182.     addq #1,QC_speedcount
  183.     move.w QC_speed,d0
  184.     cmp.w QC_speedcount,d0
  185.     bgt QC_nonew
  186.     tst.b QC_pattwait
  187.     beq QC_getnotes
  188.     subq.b #1,QC_pattwait
  189.     clr.w QC_speedcount
  190.  
  191. QC_nonew:
  192.     lea QC_samplepointers,a4
  193.     lea QC_periods(pc),a3
  194.     lea QC_chan1,a6
  195.     lea $dff0a0,a5
  196.     bsr QC_chkplayfx
  197.     lea QC_chan2-QC_chan1(a6),a6
  198.     lea $10(a5),a5
  199.     bsr QC_chkplayfx
  200.     lea QC_chan2-QC_chan1(a6),a6
  201.     lea $10(a5),a5
  202.     bsr QC_chkplayfx
  203.     lea QC_chan2-QC_chan1(a6),a6
  204.     lea $10(a5),a5
  205.     bsr QC_chkplayfx
  206.  
  207.     tst.w QC_dmacon
  208.     beq QC_mend
  209.     move.w QC_dmacon(pc),$dff096
  210.     move.w QC_dmawait,d7
  211. QC_wait6:move.b $dff006,d0
  212. QC_wait5:cmp.b $dff006,d0
  213.     beq QC_wait5
  214.     dbf d7,QC_wait6
  215.     or.w #$8000,QC_dmacon
  216.     move.w QC_dmacon(pc),$dff096
  217.     move.w QC_dmawait,d7
  218. QC_wait8:move.b $1dff006,d0
  219. QC_wait7:cmp.b $dff006,d0
  220.     beq QC_wait7
  221.     dbf d7,QC_wait8
  222.     clr.w QC_dmacon
  223.     lea QC_chan1+t_repeat,a0
  224.     lea $dff000,a5
  225.     move.l (a0),d0
  226.     cmp.l #$c00000,d0
  227.     blt .ok1
  228.     sub.l #$b80000,d0
  229. .ok1:    move.l d0,$a0(a5)
  230.     move.w 4(a0),$a4(a5)
  231.     move.l QC_chan2-QC_chan1(a0),d0
  232.     cmp.l #$c00000,d0
  233.     blt .ok2
  234.     sub.l #$b80000,d0
  235. .ok2:    move.l d0,$b0(a5)
  236.     move.w 4+QC_chan2-QC_chan1(a0),$b4(a5)
  237.     move.l QC_chan3-QC_chan1(a0),d0
  238.     cmp.l #$c00000,d0
  239.     blt .ok3
  240.     sub.l #$b80000,d0
  241. .ok3:    move.l d0,$c0(a5)
  242.     move.w 4+QC_chan3-QC_chan1(a0),$c4(a5)
  243.     move.l QC_chan4-QC_chan1(a0),d0
  244.     cmp.l #$c00000,d0
  245.     blt .ok4
  246.     sub.l #$b80000,d0
  247. .ok4:    move.l d0,$d0(a5)
  248.     move.w 4+QC_chan4-QC_chan1(a0),$d4(a5)
  249.     rts
  250.  
  251.  
  252. QC_chkplayfx:
  253.     lea QC_playfx(pc),a2
  254.     move.b t_cmd(a6),d0
  255.     and.w #$f,d0
  256.     add.w d0,d0
  257.     add.w d0,d0
  258.     move.l (a2,d0.w),a0
  259.     jmp (a0)
  260.  
  261. QC_getnotes:
  262.     tst.b QC_introrow
  263.     bne QC_ok
  264.     tst.b QC_event
  265.     beq QC_tstnewpos
  266.     btst #0,QC_event
  267.     beq QC_tstnewpos
  268.     and.b #$fe,QC_event
  269. QC_settempo:
  270.     move.l QC_ciaspeed,d0
  271.     divu QC_tempo,d0
  272. QC_ciab:move.b d0,ciatalo+$bfd000
  273.     asr.l #8,d0
  274.     move.b d0,ciatahi+$bfd000
  275. QC_tstnewpos:
  276.     tst.b QC_newposflag
  277.     beq QC_tstend
  278.     clr.b QC_newposflag
  279.     move.w QC_newposnr,QC_pos            ;Ny
  280.     bra QC_newpos
  281. QC_tstend:tst.b QC_jumpbreakflag
  282.     beq QC_tstend2
  283.     clr.b QC_jumpbreakflag
  284.     move.w QC_looprow(pc),d0
  285.     cmp.w QC_breakrow(pc),d0
  286.     bgt QC_ok
  287.     move.w d0,QC_rowcount
  288.     bra QC_ok
  289. QC_tstend2:
  290.     addq.w #1,QC_rowcount
  291.     move.w QC_rowcount(pc),d0
  292.     cmp.w QC_breakrow(pc),d0
  293.     ble QC_ok
  294.     tst.b QC_playpatt
  295.     bne QC_nonewpatt
  296.     addq.w #1,QC_pos
  297. QC_newpos:
  298.     move.w QC_pos(pc),d0
  299.     cmp.w QC_nrofpos(pc),d0
  300.     blt QC_getpos
  301.     clr.w QC_pos
  302.     moveq #0,d0
  303. QC_getpos:
  304.     move.w d0,-(sp)
  305.     move.w QC_pos,d0
  306.     move.w (sp)+,d0
  307.     move.l QC_posstart,a0
  308.     move.b (a0,d0.w),d0
  309.     move.w d0,QC_currpatt
  310.     add.w d0,d0
  311.     add.w d0,d0
  312.     lea QC_patternpointers,a0
  313.     move.l (a0,d0.w),a0
  314.     move.l 22(a0),QC_currpattpointer
  315.     move.b 1(a0),QC_breakrow+1
  316.     move.w QC_newrow(pc),QC_rowcount
  317.     clr.w QC_newrow
  318.     move.w QC_breakrow,d0
  319.     cmp.w QC_rowcount,d0
  320.     bge QC_ok
  321.     move.w d0,QC_rowcount
  322.     bra QC_ok
  323. QC_nonewpatt:
  324.     clr.w QC_rowcount
  325. QC_ok:    sf QC_introrow
  326.     clr.w QC_speedcount
  327.     move.l QC_currpattpointer(pc),a0
  328.     move.w QC_rowcount(pc),d0
  329.     asl.w #4,d0
  330.     add.w d0,a0
  331.     lea QC_samplepointers,a4
  332.     lea QC_periods(pc),a3
  333.  
  334.     lea $dff0a0,a5
  335.     lea QC_chan1,a6
  336.     bsr QC_playnote
  337.     lea $10(a5),a5
  338.     lea QC_chan2-QC_chan1(a6),a6
  339.     bsr QC_playnote
  340.     lea $10(a5),a5
  341.     lea QC_chan2-QC_chan1(a6),a6
  342.     bsr QC_playnote
  343.     lea $10(a5),a5
  344.     lea QC_chan2-QC_chan1(a6),a6
  345.     bsr QC_playnote
  346.     tst.w QC_dmacon
  347.     beq QC_update
  348.  
  349.     move.w QC_dmacon(pc),$dff096
  350.     move.w QC_dmawait,d7
  351. QC_wait2:move.b $dff006,d0
  352. QC_wait1:cmp.b $dff006,d0
  353.     beq QC_wait1
  354.     dbf d7,QC_wait2
  355.     or.w #$8000,QC_dmacon
  356.     move.w QC_dmacon(pc),$dff096
  357.     move.w QC_dmawait,d7
  358. QC_wait4:move.b $dff006,d0
  359. QC_wait3:cmp.b $dff006,d0
  360.     beq QC_wait3
  361.     dbf d7,QC_wait4
  362.     clr.w QC_dmacon
  363.     lea QC_chan1+t_repeat,a0
  364.     lea $dff000,a5
  365.     move.l (a0),d0
  366.     cmp.l #$c00000,d0
  367.     blt .ok1
  368.     sub.l #$b80000,d0
  369. .ok1:    move.l d0,$a0(a5)
  370.     move.w 4(a0),$a4(a5)
  371.     move.l QC_chan2-QC_chan1(a0),d0
  372.     cmp.l #$c00000,d0
  373.     blt .ok2
  374.     sub.l #$b80000,d0
  375. .ok2:    move.l d0,$b0(a5)
  376.     move.w 4+QC_chan2-QC_chan1(a0),$b4(a5)
  377.     move.l QC_chan3-QC_chan1(a0),d0
  378.     cmp.l #$c00000,d0
  379.     blt .ok3
  380.     sub.l #$b80000,d0
  381. .ok3:    move.l d0,$c0(a5)
  382.     move.w 4+QC_chan3-QC_chan1(a0),$c4(a5)
  383.     move.l QC_chan4-QC_chan1(a0),d0
  384.     cmp.l #$c00000,d0
  385.     blt .ok4
  386.     sub.l #$b80000,d0
  387. .ok4:    move.l d0,$d0(a5)
  388.     move.w 4+QC_chan4-QC_chan1(a0),$d4(a5)
  389. QC_update:
  390. QC_mend:rts
  391.  
  392. QC_playnote:move.l (a0)+,(a6)
  393.     moveq #0,d0
  394.     move.b (a6),d0
  395.     beq QC_isnote
  396.     add.w d0,d0
  397.     add.w d0,d0
  398.     move.l (a4,d0.w),a1
  399.     move.b 1(a1),t_volume+1(a6)
  400.     move.w 2(a1),t_length(a6)
  401.     move.b 25(a1),d0
  402.     and.w #$f,d0
  403.     add.w d0,d0
  404.     add.w d0,d0
  405.     move.l (a3,d0.w),t_finetune(a6)
  406.     move.l 30(a1),d1
  407.     move.l d1,t_start(a6)
  408.     move.l d1,t_realstart(a6)
  409.     clr.w 8(a5)
  410.     tst.b t_enable(a6)
  411.     beq .novol
  412.     move.w t_volume(a6),d0
  413.     mulu t_mainvol(a6),d0
  414.     lsr.w #6,d0
  415.     move.w d0,t_realvol(a6)
  416.     move.w d0,8(a5)
  417. .novol:    btst #0,24(a1)
  418.     beq .noloop
  419.     moveq #0,d0
  420.     move.w 26(a1),d0
  421.     move.w d0,t_rep(a6)
  422.     add.l d0,d1
  423.     add.l d0,d1
  424.     move.l d1,t_repeat(a6)
  425.     moveq #0,d0
  426.     move.w 26(a1),d0
  427.     moveq #0,d1
  428.     move.w 28(a1),d1
  429.     add.l d0,d1
  430.     move.w d1,t_length(a6)
  431.     move.w 28(a1),t_replen(a6)
  432.     bra QC_isnote
  433. .noloop    move.l #QC_quiet,t_repeat(a6)
  434.     clr.w t_rep(a6)
  435.     move.w #$1,t_replen(a6)
  436. QC_isnote:
  437.     tst.b t_notenr(a6)
  438.     blt QC_chkfirstfx
  439.     move.b t_notenr(a6),t_notenr2+1(a6)            ;Ny (flyttad)
  440.     move.w t_cmd(a6),d0
  441.     and.w #$ff0,d0
  442.     cmp.w #$e50,d0
  443.     beq QC_setfinetunefirst
  444.     and.w #$f00,d0
  445.     cmp.w #$300,d0
  446.     beq QC_settoneport
  447.     cmp.w #$500,d0
  448.     beq QC_settoneport
  449. QC_getper:move.w t_notenr2(a6),d0
  450.     add.w d0,d0
  451.     move.l t_finetune(a6),a2
  452.     move.w (a2,d0.w),t_period(a6)
  453.     move.w t_cmd(a6),d0
  454.     and.w #$ff0,d0
  455.     cmp.w #$ed0,d0
  456.     beq QC_notedelay
  457.     move.w t_dmabit(a6),d0
  458.     or.w d0,QC_dmacon
  459.     move.l t_start(a6),d0
  460.     cmp.l #$c00000,d0
  461.     blt .ok
  462.     sub.l #$b80000,d0
  463. .ok:    move.l d0,(a5)
  464.     clr.l t_adrcount(a6)
  465.     move.b (a6),t_samplenr(a6)
  466.     move.w t_length(a6),t_reallength(a6)
  467.     sf t_looping(a6)
  468.     st t_going(a6)
  469.     move.w t_length(a6),4(a5)
  470.     move.w t_period(a6),6(a5)
  471. QC_chkfirstfx:
  472.     lea QC_fxaftersetperiod(pc),a2
  473.     moveq #0,d0
  474.     move.b t_cmd(a6),d0
  475.     add.w d0,d0
  476.     add.w d0,d0
  477.     move.l (a2,d0.w),a2
  478.     jmp (a2)
  479.  
  480.  
  481. QC_setfinetunefirst:
  482.     move.b t_cmdarg(a6),d0
  483.     add.w d0,d0
  484.     add.w d0,d0
  485.     move.l (a3,d0.w),t_finetune(a6)
  486.     bra QC_getper
  487.  
  488. QC_ecommands:
  489.     lea QC_efx(pc),a2
  490.     move.b t_cmdarg(a6),d0
  491.     and.w #$f0,d0
  492.     lsr.w #2,d0
  493.     move.l (a2,d0.w),a2
  494.     jmp (a2)
  495.  
  496. QC_playecommands:
  497.     lea QC_playefx(pc),a2
  498.     move.b t_cmdarg(a6),d0
  499.     and.w #$f0,d0
  500.     lsr.w #2,d0
  501.     move.l (a2,d0.w),a2
  502.     jmp (a2)
  503.  
  504. ********** Effect commands **********
  505.  
  506. QC_arpeggio:                    ;Ny
  507.     tst.b t_cmdarg(a6)
  508.     beq QC_mend
  509.     lea QC_arptbl,a2
  510.     move.w QC_speedcount,d0
  511.     tst.b (a2,d0.w)
  512.     beq QC_arp2
  513.     blt QC_arp1
  514.     move.b t_cmdarg(a6),d0
  515.     and.w #$f,d0
  516.     add.w t_notenr2(a6),d0
  517.     add.w d0,d0
  518.     move.l t_finetune(a6),a2
  519.     move.w (a2,d0.w),6(a5)
  520.     rts
  521. QC_arp1:move.w t_period(a6),6(a5)
  522.     rts
  523. QC_arp2:moveq #0,d0
  524.     move.b t_cmdarg(a6),d0
  525.     lsr.w #4,d0
  526.     add.w t_notenr2(a6),d0
  527.     add.w d0,d0
  528.     move.l t_finetune(a6),a2
  529.     move.w (a2,d0.w),6(a5)
  530.     rts
  531.  
  532. QC_slideup:
  533.     moveq #0,d0
  534.     move.b t_cmdarg(a6),d0
  535.     sub.w d0,t_period(a6)
  536.     cmp.w #113,t_period(a6)
  537.     bgt QC_sunotlow
  538.     move.w #113,t_period(a6)
  539. QC_sunotlow:
  540.     move.w t_period(a6),6(a5)
  541.     rts
  542.  
  543. QC_slidedown:
  544.     moveq #0,d0
  545.     move.b t_cmdarg(a6),d0
  546.     add.w d0,t_period(a6)
  547.     cmp.w #856,t_period(a6)
  548.     blt QC_sdnothigh
  549.     move.w #856,t_period(a6)
  550. QC_sdnothigh:
  551.     move.w t_period(a6),6(a5)
  552.     rts
  553.  
  554. QC_settoneport:
  555.     move.w t_notenr2(a6),d0
  556.     add.w d0,d0
  557.     move.l t_finetune(a6),a2
  558.     move.w (a2,d0.w),d0
  559.     move.w d0,t_wantedperiod(a6)
  560.     cmp.w t_period(a6),d0
  561.     bgt QC_setportdown
  562.     clr.b t_portdir(a6)
  563.     rts
  564. QC_setportdown:
  565.     move.b #1,t_portdir(a6)
  566.     rts
  567.  
  568. QC_toneport:
  569.     tst.w t_wantedperiod(a6)
  570.     beq QC_mend
  571.     moveq #0,d0
  572.     move.b t_cmdarg(a6),d0
  573.     beq QC_tpold
  574.     move.b d0,t_portspeed(a6)
  575.     tst.b t_portdir(a6)            
  576.     bne QC_portdown                
  577.     sub.w d0,t_period(a6)            
  578.     move.w t_wantedperiod(a6),d0        
  579.     cmp.w t_period(a6),d0
  580.     blt QC_notyetwanted
  581.     move.w d0,6(a5)
  582.     move.w d0,t_period(a6)    
  583.     clr.w t_wantedperiod(a6)
  584.     rts
  585. QC_tpold:move.b t_portspeed(a6),d0
  586.     tst.b t_portdir(a6)
  587.     bne QC_portdown
  588.     sub.w d0,t_period(a6)
  589.     move.w t_wantedperiod(a6),d0
  590.     cmp.w t_period(a6),d0
  591.     blt QC_notyetwanted
  592.     move.w d0,6(a5)
  593.     move.w d0,t_period(a6)
  594.     clr.w t_wantedperiod(a6)
  595.     rts
  596. QC_portdown:
  597.     add.w d0,t_period(a6)
  598.     move.w t_wantedperiod(a6),d0
  599.     cmp.w t_period(a6),d0
  600.     bgt QC_notyetwanted
  601.     move.w d0,6(a5)
  602.     move.w d0,t_period(a6)
  603.     clr.w t_wantedperiod(a6)
  604.     rts
  605. QC_notyetwanted:
  606.     tst.b t_glisscont(a6)
  607.     beq QC_nogliss
  608.     move.l t_finetune(a6),a2
  609.     move.w t_period(a6),d0
  610. QC_glissloop:
  611.     cmp.w (a2)+,d0
  612.     blt QC_glissloop
  613.     move.w -2(a2),6(a5)
  614.     rts
  615. QC_nogliss:
  616.     move.w t_period(a6),6(a5)
  617.     rts
  618.  
  619. QC_vibrato:
  620.     moveq #0,d0
  621.     move.b t_vibwave(a6),d0
  622.     asl.w #7,d0
  623.     lea QC_vibtables(pc),a2
  624.     add.w d0,a2
  625.     moveq #0,d0
  626.     move.b t_cmdarg(a6),d0
  627.     beq QC_vib
  628.     move.w d0,d1
  629.     and.b #$f,d0
  630.     beq QC_vibusespeed
  631.     and.b #$f0,t_vibcmd(a6)
  632.     or.b d0,t_vibcmd(a6)
  633. QC_vibusespeed:
  634.     and.b #$f0,d1
  635.     beq QC_vib
  636.     and.b #$f,t_vibcmd(a6)
  637.     or.b d1,t_vibcmd(a6)
  638. QC_vib:    move.b t_vibcmd(a6),d0
  639.     lsr.w #3,d0
  640.     add.w d0,t_vibpos(a6)
  641.     and.w #$7e,t_vibpos(a6)
  642.     move.w t_vibpos(a6),d0
  643.     move.w t_period(a6),d1
  644.     move.w (a2,d0.w),d0
  645.     move.b t_vibcmd(a6),d2
  646.     and.w #$f,d2
  647.     muls d2,d0
  648.     add.l d0,d0
  649.     add.l d0,d0
  650.     swap d0
  651.     add.w d0,d1
  652.     cmp.w #856,d1
  653.     blt QC_vibnothigh
  654.     move.w #856,6(a5)
  655.     rts
  656. QC_vibnothigh:
  657.     cmp.w #113,d1
  658.     bgt QC_vibnotlow
  659.     move.w #113,6(a5)
  660.     rts
  661. QC_vibnotlow:
  662.     move.w d1,6(a5)
  663.     rts
  664.  
  665. QC_toneportandvolslide:
  666.     tst.w t_wantedperiod(a6)
  667.     beq QC_volslide
  668.     bsr QC_tpold
  669.     bra QC_volslide
  670.  
  671. QC_vibratoandvolslide:
  672.     bsr QC_vib
  673.     bra QC_volslide
  674.  
  675. QC_tremolo:
  676.     moveq #0,d0
  677.     move.b t_tremwave(a6),d0
  678.     asl.w #7,d0
  679.     lea QC_vibtables(pc),a2
  680.     add.w d0,a2
  681.     moveq #0,d0
  682.     move.b t_cmdarg(a6),d0
  683.     beq QC_trem
  684.     move.w d0,d1
  685.     and.b #$f,d0
  686.     beq QC_tremusespeed
  687.     and.b #$f0,t_tremcmd(a6)
  688.     or.b d0,t_tremcmd(a6)
  689. QC_tremusespeed:
  690.     and.b #$f0,d1
  691.     beq QC_trem
  692.     and.b #$f,t_tremcmd(a6)
  693.     or.b d1,t_tremcmd(a6)
  694. QC_trem:move.b t_tremcmd(a6),d0
  695.     lsr.w #3,d0
  696.     add.w d0,t_trempos(a6)
  697.     and.w #$7e,t_trempos(a6)
  698.     move.w t_trempos(a6),d0
  699.     move.w t_volume(a6),d1
  700.     move.w (a2,d0.w),d0
  701.     move.b t_tremcmd(a6),d2
  702.     and.w #$f,d2
  703.     muls d2,d0
  704.     asl.l #3,d0
  705.     swap d0
  706.     add.w d0,d1
  707.     cmp.w #$40,d1
  708.     blt QC_tremnothigh
  709.     tst.b t_enable(a6)
  710.     beq QC_mend
  711.     move.w t_mainvol(a6),t_realvol(a6)
  712.     move.w t_mainvol(a6),8(a5)
  713.     rts
  714. QC_tremnothigh:
  715.     tst.w d1
  716.     bgt QC_tremnotlow
  717.     tst.b t_enable(a6)
  718.     beq QC_mend
  719.     clr.w 8(a5)
  720.     rts
  721. QC_tremnotlow:
  722.     tst.b t_enable(a6)
  723.     beq QC_mend
  724.     mulu t_mainvol(a6),d1
  725.     lsr.w #6,d1
  726.     move.w d1,t_realvol(a6)
  727.     move.w d1,8(a5)
  728.     rts
  729.  
  730. QC_sampleoffset:
  731.     moveq #0,d0
  732.     move.b t_cmdarg(a6),d0
  733.     beq QC_sook
  734.     move.b d0,t_sampleoffset(a6)
  735. QC_sook:move.b t_sampleoffset(a6),d0
  736.     asl.w #8,d0
  737.     moveq #0,d1
  738.     move.w t_length(a6),d1
  739.     move.w d1,t_reallength(a6)
  740.     move.l d0,t_adrcount(a6)
  741.     sub.l d0,d1
  742.     ble QC_sotoolong
  743.     move.w d1,t_length(a6)
  744.     add.l d0,d0
  745.     add.l d0,t_start(a6)
  746.     move.l t_start(a6),d0
  747.     cmp.l #$c00000,d0
  748.     blt .ok
  749.     sub.l #$b80000,d0
  750. .ok:    move.l d0,(a5)
  751.     move.b (a6),t_samplenr(a6)
  752.     sf t_looping(a6)
  753.     st t_going(a6)
  754.     move.w t_length(a6),4(a5)
  755.     rts
  756. QC_sotoolong:
  757.     move.w #1,t_length(a6)
  758.     move.w t_length(a6),4(a5)
  759.     rts
  760.  
  761. QC_volslide:
  762.     moveq #0,d0
  763.     move.b t_cmdarg(a6),d0
  764.     lsr.w #4,d0
  765.     beq QC_volslidedown
  766.     add.w d0,t_volume(a6)
  767.     cmp.w #$40,t_volume(a6)
  768.     blt QC_setvol
  769.     move.w #$40,t_volume(a6)
  770. QC_setvol:
  771.     tst.b t_enable(a6)
  772.     beq QC_mend
  773.     move.w t_volume(a6),d0
  774.     mulu t_mainvol(a6),d0
  775.     lsr.w #6,d0
  776.     move.w d0,t_realvol(a6)
  777.     move.w d0,8(a5)
  778.     rts
  779. QC_volslidedown:
  780.     move.b t_cmdarg(a6),d0
  781.     sub.w d0,t_volume(a6)
  782.     tst.w t_volume(a6)
  783.     bgt QC_setvol
  784.     clr.w t_volume(a6)
  785.     tst.b t_enable(a6)
  786.     beq QC_mend
  787.     clr.w 8(a5)
  788.     rts
  789.  
  790. QC_posjump:                ;Ny
  791.     move.b t_cmdarg(a6),d0
  792.     move.b d0,QC_newposnr+1
  793.     move.b #1,QC_newposflag
  794.     clr.w QC_newrow
  795.     rts
  796.  
  797. QC_volumechange:
  798.     move.b t_cmdarg(a6),d0
  799.     cmp.b #$40,d0
  800.     blo QC_volchhigh
  801.     move.w #$40,t_volume(a6)
  802.     tst.b t_enable(a6)
  803.     beq QC_mend
  804.     move.w t_mainvol(a6),t_realvol(a6)
  805.     move.w t_mainvol(a6),8(a5)
  806.     rts
  807. QC_volchhigh:
  808.     move.b d0,t_volume+1(a6)
  809.     tst.b t_enable(a6)
  810.     beq QC_mend
  811.     move.w t_volume(a6),d0
  812.     mulu t_mainvol(a6),d0
  813.     lsr.w #6,d0
  814.     move.w d0,t_realvol(a6)
  815.     move.w d0,8(a5)
  816.     rts
  817.  
  818. QC_patternbreak:            ;Ny
  819.     move.w QC_pos,d0
  820.     addq.w #1,d0
  821.     move.w d0,QC_newposnr
  822.     move.b t_cmdarg(a6),QC_newrow+1
  823.     move.b #1,QC_newposflag
  824.     rts
  825.  
  826. QC_setspeed:
  827.     move.b t_cmdarg(a6),d0
  828.     beq QC_setspeed1
  829.     cmp.b #$1f,d0
  830.     bhi QC_temposet
  831.     move.b d0,QC_speed+1
  832.     clr.w QC_speedcount
  833.     rts
  834. QC_setspeed1:
  835.     move.w #1,QC_speed
  836.     clr.w QC_speedcount
  837.     rts
  838. QC_temposet:
  839.     move.b d0,QC_tempo+1
  840.     or.b #$1,QC_event
  841.     rts
  842.  
  843. QC_setfilter:
  844.     move.b t_cmdarg(a6),d0
  845.     and.b #1,d0
  846.     add.b d0,d0
  847.     and.b #$fd,$bfe001
  848.     or.b d0,$bfe001
  849.     rts
  850.  
  851. QC_fineslideup:
  852.     move.b t_cmdarg(a6),d0
  853.     and.w #$f,d0
  854.     sub.w d0,t_period(a6)
  855.     cmp.w #113,t_period(a6)
  856.     bgt QC_fsunotlow
  857.     move.w #113,t_period(a6)
  858. QC_fsunotlow:
  859.     move.w t_period(a6),6(a5)
  860.     rts
  861.  
  862. QC_fineslidedown:
  863.     move.b t_cmdarg(a6),d0
  864.     and.w #$f,d0
  865.     add.w d0,t_period(a6)
  866.     cmp.w #856,t_period(a6)
  867.     blt QC_fsdnothigh
  868.     move.w #856,t_period(a6)
  869. QC_fsdnothigh:
  870.     move.w t_period(a6),6(a5)
  871.     rts
  872.  
  873. QC_glisscontrol:
  874.     move.b t_cmdarg(a6),t_glisscont(a6)
  875.     and.b #$f,t_glisscont(a6)
  876.     rts
  877.  
  878. QC_vibratowave:
  879.     move.b t_cmdarg(a6),t_vibwave(a6)
  880.     and.b #$f,t_vibwave(a6)
  881.     rts
  882.  
  883. QC_finetune:
  884.     move.b t_cmdarg(a6),d0
  885.     and.w #$f,d0
  886.     add.w d0,d0
  887.     add.w d0,d0
  888.     move.l (a3,d0.w),t_finetune(a6)
  889.     rts
  890.  
  891. QC_jumploop:
  892.     move.b t_cmdarg(a6),d0
  893.     and.w #$f,d0
  894.     beq QC_saveloop
  895.     tst.b QC_loopcount
  896.     beq QC_newloop
  897.     subq.b #1,QC_loopcount
  898.     beq QC_mend
  899.     move.b #1,QC_jumpbreakflag
  900.     rts
  901. QC_newloop:
  902.     move.b d0,QC_loopcount
  903.     move.b #1,QC_jumpbreakflag
  904.     rts
  905. QC_saveloop:
  906.     move.w QC_rowcount(pc),QC_looprow
  907.     rts
  908.  
  909. QC_tremolowave:
  910.     move.b t_cmdarg(a6),t_tremwave(a6)
  911.     and.b #$f,t_tremwave(a6)
  912.     rts
  913.  
  914. QC_initretrig:
  915.     clr.b t_retrig(a6)
  916. QC_retrignote:
  917.     addq.b #1,t_retrig(a6)
  918.     move.b t_cmdarg(a6),d0
  919.     and.b #$f,d0
  920.     cmp.b t_retrig(a6),d0
  921.     bgt QC_mend
  922.     clr.b t_retrig(a6)
  923.     move.w t_dmabit(a6),d0
  924.     or.w d0,QC_dmacon
  925.     move.l t_start(a6),d0
  926.     cmp.l #$c00000,d0
  927.     blt .ok
  928.     sub.l #$b80000,d0
  929. .ok:    move.l d0,(a5)
  930.     clr.l t_adrcount(a6)
  931.     move.b (a6),t_samplenr(a6)
  932.     sf t_looping(a6)
  933.     st t_going(a6)
  934.     move.w t_length(a6),4(a5)
  935.     move.w t_period(a6),6(a5)
  936.     rts
  937.  
  938. QC_volumefineup:
  939.     move.b t_cmdarg(a6),d0
  940.     and.w #$f,d0
  941.     add.w d0,t_volume(a6)
  942.     cmp.w #$40,t_volume(a6)
  943.     blt QC_vfuset
  944.     move.w #$40,t_volume(a6)
  945.     tst.b t_enable(a6)
  946.     beq QC_mend
  947.     move.w t_mainvol(a6),t_realvol(a6)
  948.     move.w t_mainvol(a6),8(a5)
  949.     rts
  950. QC_vfuset:
  951.     tst.b t_enable(a6)
  952.     beq QC_mend
  953.     move.w t_volume(a6),d0
  954.     mulu t_mainvol(a6),d0
  955.     lsr.w #6,d0
  956.     move.w d0,t_realvol(a6)
  957.     move.w d0,8(a5)
  958.     rts
  959.  
  960. QC_volumefinedown:
  961.     move.b t_cmdarg(a6),d0
  962.     and.w #$f,d0
  963.     sub.w d0,t_volume(a6)
  964.     bge QC_vfdset
  965.     clr.w t_volume(a6)
  966.     tst.b t_enable(a6)
  967.     beq QC_mend
  968.     clr.w 8(a5)
  969.     rts
  970. QC_vfdset:
  971.     tst.b t_enable(a6)
  972.     beq QC_mend
  973.     move.w t_volume(a6),d0
  974.     mulu t_mainvol(a6),d0
  975.     lsr.w #6,d0
  976.     move.w d0,t_realvol(a6)
  977.     move.w d0,8(a5)
  978.     rts
  979.  
  980. QC_notecut:
  981.     moveq #0,d1
  982.     move.b t_cmdarg(a6),d1
  983.     and.b #$f,d1
  984.     cmp.w QC_speedcount(pc),d1
  985.     bgt QC_mend
  986.     clr.w t_volume(a6)
  987.     tst.b t_enable(a6)
  988.     beq QC_mend
  989.     clr.w 8(a5)
  990.     rts
  991.  
  992. QC_notedelay:
  993.     moveq #0,d1
  994.     tst.b t_notenr(a6)
  995.     blt QC_mend
  996.     move.b t_cmdarg(a6),d1
  997.     and.b #$f,d1
  998.     cmp.w QC_speedcount(pc),d1
  999.     bne QC_mend
  1000.     move.w t_dmabit(a6),d0
  1001.     or.w d0,QC_dmacon
  1002.     move.l t_start(a6),d0
  1003.     cmp.l #$c00000,d0
  1004.     blt .ok
  1005.     sub.l #$b80000,d0
  1006. .ok:    move.l d0,(a5)
  1007.     clr.l t_adrcount(a6)
  1008.     move.b (a6),t_samplenr(a6)
  1009.     sf t_looping(a6)
  1010.     st t_going(a6)
  1011.     move.w t_length(a6),4(a5)
  1012.     move.w t_period(a6),6(a5)
  1013.     rts
  1014.  
  1015. QC_patterndelay:
  1016.     move.b t_cmdarg(a6),QC_pattwait
  1017.     and.b #$f,QC_pattwait
  1018.     rts
  1019.  
  1020. QC_arptbl:rept 86        ;if your assembler doensn't want to handle
  1021.     dc.b -1,0,1        ;the "rept" command, you'll have to write
  1022.     endr            ;a list incl. 256 numbers like this:
  1023.                 ;-1,0,1,-1,0,1,-1.. and so on.
  1024.  
  1025. QC_playfx:dc.l QC_arpeggio
  1026.     dc.l QC_slideup
  1027.     dc.l QC_slidedown
  1028.     dc.l QC_toneport
  1029.     dc.l QC_vibrato
  1030.     dc.l QC_toneportandvolslide
  1031.     dc.l QC_vibratoandvolslide
  1032.     dc.l QC_tremolo
  1033.     dc.l QC_mend
  1034.     dc.l QC_mend
  1035.     dc.l QC_volslide
  1036.     dc.l QC_mend
  1037.     dc.l QC_mend
  1038.     dc.l QC_mend
  1039.     dc.l QC_playecommands
  1040.     dc.l QC_mend
  1041.  
  1042. QC_playefx:dc.l QC_mend
  1043.     dc.l QC_mend
  1044.     dc.l QC_mend
  1045.     dc.l QC_mend
  1046.     dc.l QC_mend
  1047.     dc.l QC_mend
  1048.     dc.l QC_mend
  1049.     dc.l QC_mend
  1050.     dc.l QC_mend
  1051.     dc.l QC_retrignote
  1052.     dc.l QC_mend
  1053.     dc.l QC_mend
  1054.     dc.l QC_notecut
  1055.     dc.l QC_notedelay
  1056.     dc.l QC_mend
  1057.     dc.l QC_mend
  1058.  
  1059. QC_efx:    dc.l QC_setfilter
  1060.     dc.l QC_fineslideup
  1061.     dc.l QC_fineslidedown
  1062.     dc.l QC_glisscontrol
  1063.     dc.l QC_vibratowave
  1064.     dc.l QC_finetune
  1065.     dc.l QC_jumploop
  1066.     dc.l QC_tremolowave
  1067.     dc.l QC_mend
  1068.     dc.l QC_initretrig
  1069.     dc.l QC_volumefineup
  1070.     dc.l QC_volumefinedown
  1071.     dc.l QC_notecut
  1072.     dc.l QC_notedelay
  1073.     dc.l QC_patterndelay
  1074.     dc.l QC_mend
  1075.  
  1076.  
  1077. QC_fxaftersetperiod:
  1078.     dc.l QC_arpeggio
  1079.     dc.l QC_mend
  1080.     dc.l QC_mend
  1081.     dc.l QC_mend
  1082.     dc.l QC_mend
  1083.     dc.l QC_mend
  1084.     dc.l QC_mend
  1085.     dc.l QC_mend
  1086.     dc.l QC_mend
  1087.     dc.l QC_sampleoffset
  1088.     dc.l QC_mend
  1089.     dc.l QC_posjump
  1090.     dc.l QC_volumechange
  1091.     dc.l QC_patternbreak
  1092.     dc.l QC_ecommands
  1093.     dc.l QC_setspeed
  1094.  
  1095.  
  1096. QC_vibtables:
  1097.     dc.w 0,3211,6392,9511,12539,15446,18204,20787,23169,25329
  1098.     dc.w 27244,28897,30272,31356,32137,32609,32767,32609,32137
  1099.     dc.w 31356,30272,28897,27244,25329,23169,20787,18204,15446
  1100.     dc.w 12539,9511,6392,3211
  1101.     dc.w 0,-3211,-6392,-9511,-12539,-15446,-18204,-20787,-23169,-25329
  1102.     dc.w -27244,-28897,-30272,-31356,-32137,-32609,-32767,-32609,-32137
  1103.     dc.w -31356,-30272,-28897,-27244,-25329,-23169,-20787,-18204,-15446
  1104.     dc.w -12539,-9511,-6392,-3211
  1105.  
  1106.     dc.w 32767,31744,30720,29696,28672,27648,26624,25600,24576,23552
  1107.     dc.w 22528,21504,20480,19456,18432,17408,16384,15360,14336,13312
  1108.     dc.w 12288,11264,10240,9216,8192,7168,6144,5120,4096,3072,2048,1024
  1109.     dc.w 0,-1024,-2048,-3072,-4096,-5120,-6144,-8168,-8192,-9216,-10240
  1110.     dc.w -11264,-12288,-13312,-14336,-15360,-16384,-17408,-18432,-19456
  1111.     dc.w -20480,-21504,-22528,-23552,-24576,-25600,-26624,-27648,-28672
  1112.     dc.w -29696,-30720,-31744,-32768
  1113.  
  1114.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1115.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1116.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1117.     dc.w 32767,32767
  1118.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1119.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1120.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1121.     dc.w -32767,-32767
  1122.  
  1123.  
  1124.  
  1125.  
  1126. QC_periods:dc.l QC_periodtable
  1127.     dc.l QC_periodtable+72
  1128.     dc.l QC_periodtable+144
  1129.     dc.l QC_periodtable+216
  1130.     dc.l QC_periodtable+288
  1131.     dc.l QC_periodtable+360
  1132.     dc.l QC_periodtable+432
  1133.     dc.l QC_periodtable+504
  1134.     dc.l QC_periodtable+576
  1135.     dc.l QC_periodtable+648
  1136.     dc.l QC_periodtable+720
  1137.     dc.l QC_periodtable+792
  1138.     dc.l QC_periodtable+864
  1139.     dc.l QC_periodtable+936
  1140.     dc.l QC_periodtable+1008
  1141.     dc.l QC_periodtable+1080
  1142.  
  1143.  
  1144. QC_periodtable:
  1145.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1146.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1147.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1148.  
  1149.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1150.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1151.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1152.  
  1153.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1154.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1155.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1156.  
  1157.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1158.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1159.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1160.  
  1161.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1162.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1163.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1164.  
  1165.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1166.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1167.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1168.  
  1169.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1170.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1171.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1172.  
  1173.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1174.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1175.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1176.  
  1177.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1178.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1179.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1180.  
  1181.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1182.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1183.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1184.  
  1185.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1186.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1187.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1188.  
  1189.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1190.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1191.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1192.  
  1193.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1194.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1195.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1196.  
  1197.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1198.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1199.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1200.  
  1201.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1202.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1203.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1204.  
  1205.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1206.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1207.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1208.  
  1209.     
  1210. QC_samplepointers:    ds.l 256
  1211. QC_patternpointers:    ds.l 256
  1212. QC_oldirq:        dc.l 0
  1213. QC_posstart:        dc.l 0
  1214. QC_currpattpointer:dc.l 0
  1215. QC_currpatt:dc.w 0
  1216. QC_nrofpos:dc.w 0
  1217. QC_pos:    dc.w 0
  1218. QC_newposnr:dc.w 0
  1219. QC_speed:dc.w 6
  1220. QC_speedcount:dc.w 0
  1221. QC_breakrow:dc.w 0
  1222. QC_newrow:dc.w 0
  1223. QC_rowcount:dc.w 0
  1224. QC_arpcount:dc.w 0
  1225. QC_looprow:dc.w 0
  1226. QC_tempo:dc.w 125
  1227. QC_dmacon:dc.w 0
  1228. QC_newposflag:dc.b 0
  1229. QC_jumpbreakflag:dc.b 0
  1230. QC_loopcount:dc.b 0
  1231. QC_pattwait:dc.b 0
  1232. QC_ready:dc.b 0
  1233. QC_introrow:dc.b 0
  1234.  
  1235.     even
  1236. QC_intserver:
  1237.     dc.l 0,0
  1238.     dc.b 2,5
  1239.     dc.l QC_intname
  1240.     dc.l 0,QC_play
  1241. QC_ciabase:dc.l 0
  1242. ScrYFreq:    dc.l 0
  1243. ScrXFreq:    dc.l 0
  1244. QC_ciaspeed:dc.l 0
  1245. QC_vblspeed:dc.w 0
  1246. QC_dmawait:    dc.w 20            ;This varies depending on the screen
  1247. QC_cianame:dc.b "ciab.resource",0
  1248. QC_intname:dc.b "QuadraPlayer 1.0",0
  1249. QC_event:dc.b 0            ;bit 0 = check vblank
  1250. QC_playpatt:dc.b 0
  1251.     even
  1252. QC_quietsamp:
  1253.     dc.w 0,1
  1254.     ds.b 20
  1255.     dc.w 0
  1256.     dc.w 1
  1257.     dc.l QC_quiet
  1258.  
  1259. t_notenr = 1
  1260. t_cmd = 2
  1261. t_cmdarg = 3
  1262. t_repeat = 4
  1263. t_replen = 8
  1264. t_period = 10
  1265. t_volume = 12
  1266. t_length = 14
  1267. t_finetune = 42
  1268. t_start = 18
  1269. t_dmabit = 22
  1270. t_notenr2 = 24
  1271. t_wantedperiod = 26
  1272. t_portdir = 28
  1273. t_vibwave = 29
  1274. t_glisscont = 30
  1275. t_vibcmd = 31
  1276. t_vibpos = 32
  1277. t_tremwave = 34
  1278. t_tremcmd = 35
  1279. t_trempos = 36
  1280. t_sampleoffset = 38
  1281. t_retrig = 39
  1282. t_portspeed = 40
  1283. t_adrcount = 46
  1284. t_looping = 41
  1285. t_going = 50
  1286. t_rep = 52
  1287. t_samplenr =51
  1288. t_reallength = 54
  1289. t_realstart = 56
  1290. t_enable = 60
  1291. t_mainvol = 62
  1292. t_realvol = 64
  1293.     even
  1294.  
  1295.     cnop 0,4
  1296. CIAFlag:dc.b 0
  1297.  
  1298.     section Sound,data_c
  1299. QC_quiet: dc.w 0
  1300.  
  1301. QC_chan1:dc.l 0            ;The note and command
  1302.     dc.l 0            ;Repeat
  1303.     dc.w 0            ;Replen
  1304.     dc.w 0            ;Period
  1305.     dc.w 0            ;Volume
  1306.     dc.w 0            ;Length
  1307.     dc.w 0            ;Unused
  1308.     dc.l 0            ;Start
  1309.     dc.w 1            ;DMAbit
  1310.     dc.w 0            ;NoteNr2
  1311.     dc.w 0            ;WantedPeriod
  1312.     dc.b 0            ;Portdir
  1313.     dc.b 0            ;VibWave
  1314.     dc.b 0            ;Glisscont
  1315.     dc.b 0            ;Vibcmd
  1316.     dc.w 0            ;VibPos
  1317.     dc.b 0            ;Tremwave
  1318.     dc.b 0            ;Tremcmd
  1319.     dc.w 0            ;Trempos
  1320.     dc.b 0            ;Sampleoffset
  1321.     dc.b 0            ;Retrig
  1322.     dc.b 0            ;Portspeed
  1323.     dc.b 0            ;Looping
  1324.     dc.l 0            ;Finetune
  1325.     dc.l 0            ;AdrCounter
  1326.     dc.b 0            ;Going
  1327.     dc.b 0            ;Samplenr
  1328.     dc.w 0            ;Repeat in words
  1329.     dc.w 0            ;Allways the length in words
  1330.     dc.l 0            ;Real startpos
  1331.     dc.b $ff        ;True = playable
  1332.     dc.b 0
  1333.     dc.w $40        ;Mainvol
  1334.     dc.w 0            ;Realvol
  1335.  
  1336.     even
  1337. QC_chan2:dc.l 0
  1338.     dc.l 0
  1339.     dc.w 0
  1340.     dc.w 0
  1341.     dc.w 0
  1342.     dc.w 0
  1343.     dc.w 0
  1344.     dc.l 0
  1345.     dc.w 2
  1346.     dc.w 0
  1347.     dc.w 0
  1348.     dc.b 0
  1349.     dc.b 0
  1350.     dc.b 0
  1351.     dc.b 0
  1352.     dc.w 0
  1353.     dc.b 0
  1354.     dc.b 0
  1355.     dc.w 0
  1356.     dc.b 0
  1357.     dc.b 0
  1358.     dc.b 0
  1359.     dc.b 0
  1360.     dc.l 0
  1361.     dc.l 0
  1362.     dc.b 0
  1363.     dc.b 0
  1364.     dc.w 0
  1365.     dc.w 0
  1366.     dc.l 0
  1367.     dc.b $ff
  1368.     dc.b 0
  1369.     dc.w $40        ;Mainvol
  1370.     dc.w 0
  1371.     even
  1372. QC_chan3:dc.l 0
  1373.     dc.l 0
  1374.     dc.w 0
  1375.     dc.w 0
  1376.     dc.w 0
  1377.     dc.w 0
  1378.     dc.w 0
  1379.     dc.l 0
  1380.     dc.w 4
  1381.     dc.w 0
  1382.     dc.w 0
  1383.     dc.b 0
  1384.     dc.b 0
  1385.     dc.b 0
  1386.     dc.b 0
  1387.     dc.w 0
  1388.     dc.b 0
  1389.     dc.b 0
  1390.     dc.w 0
  1391.     dc.b 0
  1392.     dc.b 0
  1393.     dc.b 0
  1394.     dc.b 0
  1395.     dc.l 0
  1396.     dc.l 0
  1397.     dc.b 0
  1398.     dc.b 0
  1399.     dc.w 0
  1400.     dc.w 0
  1401.     dc.l 0
  1402.     dc.b $ff
  1403.     dc.b 0
  1404.     dc.w $40        ;Mainvol
  1405.     dc.w 0
  1406.     even
  1407. QC_chan4:dc.l 0
  1408.     dc.l 0
  1409.     dc.w 0
  1410.     dc.w 0
  1411.     dc.w 0
  1412.     dc.w 0
  1413.     dc.w 0
  1414.     dc.l 0
  1415.     dc.w 8
  1416.     dc.w 0
  1417.     dc.w 0
  1418.     dc.b 0
  1419.     dc.b 0
  1420.     dc.b 0
  1421.     dc.b 0
  1422.     dc.w 0
  1423.     dc.b 0
  1424.     dc.b 0
  1425.     dc.w 0
  1426.     dc.b 0
  1427.     dc.b 0
  1428.     dc.b 0
  1429.     dc.b 0
  1430.     dc.l 0
  1431.     dc.l 0
  1432.     dc.b 0
  1433.     dc.b 0
  1434.     dc.w 0
  1435.     dc.w 0
  1436.     dc.l 0
  1437.     dc.b $ff
  1438.     dc.b 0
  1439.     dc.w $40        ;Mainvol
  1440.     dc.w 0
  1441.  
  1442.     section Data,data_c
  1443. QC_data:                ;Put your module here!
  1444.